package com.example.pandaso.service.impl;

import com.example.pandaso.mapper.BlockDao;
import com.example.pandaso.pojo.*;
import com.example.pandaso.service.BlockService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * (Block)表服务实现类
 *
 * @since 2023-06-04 19:56:32
 */
@Service("blockService")
public class BlockServiceImpl implements BlockService {
    @Resource
    private BlockDao blockDao;

    /**
     * 通过ID查询单条数据
     *
     * @param blockId 主键
     * @return 实例对象
     */
    @Override
    public Block queryById(Integer blockId) {
        return this.blockDao.queryById(blockId);
    }
    /**
     * 通过ID查询多条数据
     *
     * @param blockId 主键
     * @return 实例对象列表
     *
     * 需求：通过block ID得到对象值
     * 结构：{
     *     block_name:''
     *     tags:{
     *         [
     *          tags_id:
     *          tags_name:
     *          tags_URL:
     *         ]
     *     }
     * }
     *
     *遍历返回数据 Tags对象实例化 将此对象添加到tags列表以备结合block_name 添加到新的列表中
     *
     * 此时得到的数据还没有键 创建MAP添加键值对
     */
    @Override
    public List<Object> queryByUserid(Integer blockId) {
        List<TagsVo> tagsVos = this.blockDao.queryByUserid(blockId);

        List<TagsVo> tagsVoList_01 = new ArrayList<>();
        List<Object> resultList = new ArrayList<>();

        for (TagsVo item : tagsVos) {
            List<Tags> tagsList = new ArrayList<>();
            Tags tags = new Tags();
            TagsVo tagsVo = new TagsVo();

            tags.setTag_Name(item.getTag_Name());
            tags.setTag_URL(item.getTag_URL());
            tags.setTag_id(item.getTag_id());
            tagsList.add(tags);

            tagsVo.setBlock_name(item.getBlock_name());
            tagsVo.setTags(tagsList);
            tagsVoList_01.add(tagsVo);
        }

        for (TagsVo tagsVo : tagsVoList_01) {
            Map<String, Object> result = new HashMap<>();
            result.put("block_name", tagsVo.getBlock_name());
            result.put("tags", tagsVo.getTags());
            resultList.add(result);
        }


        return resultList;
    }

    /**
     * 分页查询
     *
     * @param block 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    @Override
    public Page<Block> queryByPage(Block block, PageRequest pageRequest) {
        long total = this.blockDao.count(block);
        return new PageImpl<>(this.blockDao.queryAllByLimit(block, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
//     * @param block 实例对象
     * @return 实例对象
     */

    @Override
    public boolean insert(String block_name, String tag_name, String tag_URL, Integer userid) {
       return this.blockDao.insert(block_name,tag_name,tag_URL,userid);
    }

    /**
     * 修改数据
     *
     * @param block 实例对象
     * @return 实例对象
     */
    @Override
    public Block update(Block block) {
        this.blockDao.update(block);
        return this.queryById(block.getBlockId());
    }

    /**
     * 通过主键删除数据
     *
     * @param tagId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer tagId) {
        return this.blockDao.deleteById(tagId) > 0;
    }
}
